#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#       main.py
#version 0.1
from random import choice
from ficheros import *
from tad import *

def quien_empieza():
    """ Devuelve aleatoriamente al jugador que empezará a jugar"""
    nombres = []
    nombres.append(raw_input("Ingrese el nombre de un jugador: "))
    nombres.append(raw_input("Ingrese el nombre del otro jugador: "))
    elegido = choice(nombres)
    nombres.remove(elegido)
    jugador1 = Jugador(elegido,"@") #siempre sera el primero!
    jugador2 = Jugador(nombres[0],"*")
    return jugador1, jugador2
    
        
def ganar_mano(jugador1, jugador2):
    if len(jugador1.mano) + len(jugador2.mano) <= 1:
        if jugador1.puntaje > jugador2.puntaje:
            print "\n *** %s ha ganado esta mano! ***" % jugador1.nombre
            jugador1.manos_ganadas += 1
        elif jugador1.puntaje < jugador2.puntaje:
            print "\n *** %s ha ganado esta mano! ***" % jugador2.nombre
            jugador2.manos_ganadas += 1
        else:
            print "Empate"

        jugador1.mazo.reset_mano()
        jugador2.mazo.reset_mano()
        raw_input()
        return 1 

def ganar_partido(jugador1, jugador2, juego_nro):
    """Verifica cuantas manos gano c/u"""
    mano_j1 = jugador1.manos_ganadas
    mano_j2 = jugador2.manos_ganadas
    jugador1.reset_puntaje()
    jugador2.reset_puntaje()
    
    if ((mano_j1 > mano_j2) and (juego_nro == 3)) or (mano_j1-mano_j2 == 2):
        print jugador1.nombre, "ha ganado este partido, y es re champion!"
        jugador1.partidos_ganados +=1
        return 1
    elif ((mano_j1 < mano_j2) and (juego_nro == 3)) or (mano_j2-mano_j1 == 2):
        print jugador2.nombre, "ha ganado este partido, y es re champion!"
        jugador2.partidos_ganados +=1
        return 1
    elif (mano_j1 == mano_j2)  and (juego_nro == 3):
        #juego_nro lo comparo con cuatro por que el for va de [1a4)
        print "Empate... como ninguno de los dos gano... ¿entonces ambos perdieron? mmm"
        return 1

        
def elegir_carta(nombre, identificador, mano, tablerito):
    diccionario = {}
    indice_carta = ""
    pos = ""
    indice_posible = []
    posicion_posible = ["00", "10", "20", "01", "11", "21", "02", "12", "22"]
    print "# " + nombre + "[ "+ identificador + " ] debe elegir una carta:"
    for  indice, carta in enumerate(mano):
        diccionario[str(indice)] = carta    
        print str(indice) + ") " + carta.__str__()
    indice_posible = str(range(0,len(mano)))
    
    while ((indice_carta not in indice_posible) or (pos not in posicion_posible)):
        indice_carta = raw_input("Elegi la carta que queres [ ej 0 ]: ")
        pos = raw_input("Elegi una posicion XY [ ej 00 ]: ")
        if pos in posicion_posible:
            nodo_destino = tablerito.pos[pos]
            if nodo_destino.get_carta(): # verifica que la posicion este vacia
                pos = "-1"
                print "Posicion ocupada!"
        else:
            pos = "-1"
        if (indice_carta not in indice_posible) or (indice_carta == ""):
            print "Ese indice no contiene una carta"
            pos = "-1"
            
    return (diccionario[indice_carta], pos)
    
def mostrar_puntajes(jugador1, jugador2):
    """Imprime los puntajes de los jugadores"""
    print ("[[[ " + jugador1.nombre + ": " + jugador1.get_puntaje()\
    + "pts --- " +  jugador2.nombre + ": " + jugador2.get_puntaje() + "pts ]]]\n").center(60)

def preparacion(jugador1,jugador2):
    """Prepara a ambos jugadores para iniciar la partida"""
    jugador1.reset_puntaje()
    jugador2.reset_puntaje()
    jugador1.mazo.obtener_mano()
    jugador2.mazo.obtener_mano()
    jugador1.get_mano()
    jugador2.get_mano()

def ciclo_de_juego(tablerito, mostrar_puntajes, jugador1, jugador2, ganar_mano):
    """Funcion donde se desarrolla la dinamica del juego"""
    tablerito.representar()
    mostrar_puntajes(jugador1, jugador2)
    carta, pos = elegir_carta(jugador1.nombre, jugador1.identificador, jugador1.mano, tablerito)
    tablerito.insertar_carta(carta, pos, jugador1, jugador2)
    jugador1.mano.remove(carta) # quito la carta de la mano!
    
    tablerito.representar()
    mostrar_puntajes(jugador1, jugador2)
    if ganar_mano(jugador1, jugador2):
        return True
    carta, pos = elegir_carta(jugador2.nombre, jugador2.identificador, jugador2.mano, tablerito)
    tablerito.insertar_carta(carta, pos, jugador1, jugador2)
    jugador2.mano.remove(carta) # quito la carta de la mano!
    if ganar_mano(jugador1, jugador2):
        return True

def main():
    rc="cartas.csv" # RUTA!!!!!
    primer_juego = True
    salir = False #inicios la variable para que entre al ciclo
    io = IO_control() #es solo para darle las cartas al mazo
    while True:
        if primer_juego != True:
            rta = raw_input("¿Desea volver a jugar? [si/no]: ")
            if rta == "no":
                break
        primer_juego = False #solo para que en el proximo pregunte
        jugador1, jugador2 = quien_empieza()
        #instancio los mazos
        mazo1 = Mazo(rc, jugador1)
        mazo2 = Mazo(rc, jugador2)
        #les agrego cartas
        mazo1.agregar_cartas(io.entregar_cartas_aleatorias(rc))
        mazo2.agregar_cartas(io.entregar_cartas_aleatorias(rc))
        #asigno los mazos a los jugadores
        jugador1.set_mazo(mazo1)
        jugador2.set_mazo(mazo2)
        #instancio el tablero
        tablerito = Tablero()
        for juego_nro in range(1,4):
            #estas seran las partidas
            tablerito.reset()
            preparacion(jugador1,jugador2)
            print "---Juego " + str(juego_nro) + "/3---\n"
            salir = False #Reseteo la variable
            while salir != True:
                salir = ciclo_de_juego(tablerito, mostrar_puntajes, jugador1, jugador2, ganar_mano)
            if ganar_partido(jugador1, jugador2, juego_nro):
                break
main()
#    N
#O       E
#    S
